home *** CD-ROM | disk | FTP | other *** search
- page ,80
- ;Program to slow down the printer bios code. It sets up interrupt
- ;10H so that it goes here first for a delay.
- zpage segment at 0
- ;segment at location 0
- dd 23 dup(?)
- prtinto dw (?) ;offset for print interrupt
- prtints dw (?) ;label for print interrupt
- zpage ends
- CODE SEGMENT PUBLIC
- segp db ?
- org 100h ;space past prefix
- ASSUME CS:CODE,ES:ZPAGE,DS:CODE,SS:CODE
- start proc far
- jmp main ;goto main part of code
- strtmove label byte ;start of moved code
- origmove equ 20h ;new loc of moved code
- omc equ strtmove-(segp+origmove)
- old17 dd (?) ;old print vector
- org $-4 ;overlay dw with two words
- old17off dw (?) ;offset value for old interrupt
- old17seg dw (?) ;segment value old interrupt
- intentry label near ;label for interrupt 17
- push cx ;save cx value
- mov cx,80h ;set delay value
- loop: loop loop ;take delay
- pop cx ;restore cx value
- jmp cs:old17-omc ;goto original print code
- endmove equ $ ;end of moved code
- main label near ;main part of code
- mov ax,0 ;set zero value
- mov es,ax ;point to low storage
- mov ax,prtints ;save the...
- mov old17seg,ax ;..old segment value
- mov ax,prtinto ;save the..
- mov old17off,ax ;..old offset value
- mov prtints,cs ;move current segment to new segment
- mov prtinto,offset intentry-strtmove+origmove ;set new offset
- mov ax,ds ;reset .....
- mov es,ax ;...extra segment
- mov di,origmove ;set target location
- mov si,offset strtmove ;set origin location
- mov cx,offset endmove-strtmove ;set length
- cld ;set forward direction
- rep movsb ;move the code
- mov dx,offset endmove-strtmove+origmove ; set length
- int 27h ;return but stay resident
- start endp
- CODE ENDS
- END start